package spring.cloud.tasks.executor.task;

import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import spring.cloud.tasks.executor.listener.config.TaskConfiguration;
import spring.cloud.tasks.executor.trigger.Triggered;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 作业运行上下文
 */
@Slf4j
@Setter
@Getter
public class TaskExecuteContext {
    private String nameSpace;
    private String executorId;

    /**
     * 作业名称.
     */
    private String taskId;
    /**
     * 作业配置类
     */
    private TaskConfiguration taskConfiguration;
    private Class<?> taskClass;
    /**
     * Job超时时间(秒)
     */
    private int timeoutSeconds;
    /**
     * 分片总数.
     */
    private int taskItemTotalCount;
    /**
     * 运行在本作业服务器的分片序列号集合.
     */

    private List<Integer> taskItemIndexList = new ArrayList<>();
    /**
     * 运行在本作业项的分片序列号和个性化参数列表.
     */
    private Map<Integer, String> taskItemIndexToTaskItemAndParameterMap = new HashMap<Integer, String>();
    /**
     * 运行在本作业项的分片序列号和运行结果.
     */
    private Map<Integer, TaskItemExecuteResult> taskItemIndexToExecuteResultMap = new HashMap<Integer, TaskItemExecuteResult>();
    /**
     * 作业运行日志, key为分片项
     */
    private Map<Integer, String> jobLogMap = new HashMap<>();
    /**
     * 数据分片项和数据处理位置Map.
     */
    private Map<Integer, String> offsets = new HashMap<>();
    /**
     * 作业自定义参数. 可以配置多个相同的作业, 但是用不同的参数作为不同的调度实例.
     */
    private String taskParameter;
    /**
     * 自定义上下文
     */
    private Map<String, String> customContext;
    /**
     * 触发执行的数据
     */
    private Triggered triggered;

    public void putTaskItemLog(Integer taskItem, String taskItemLog) {
        jobLogMap.put(taskItem, taskItemLog);
    }

    public String getTaskItemLog(Integer taskItem) {
        return jobLogMap.get(taskItem);
    }


}
